package com.sky.context;

/**
 * 基础上下文类，用于存储当前线程的员工id。
 * 详细解释：在Sky-Take-Out项目中，每个请求都对应一个线程，而每个线程都有自己的上下文信息。
 * 这里使用ThreadLocal来存储当前线程的员工id，以便在后续的方法调用中使用。
 */
public class BaseContext {

    /**
     * 线程局部变量，用于存储当前线程的员工id。
     * 详细解释：每个线程都有自己的线程局部变量，不同线程之间的变量值互不干扰。
     * 这里使用ThreadLocal来存储当前线程的员工id，以便在后续的方法调用中使用。
     */
    public static ThreadLocal<Long> threadLocal = new ThreadLocal<>();

    /**
     * 设置当前线程的员工id。
     * @param id 员工id
     */
    public static void setCurrentId(Long id) {
        threadLocal.set(id);
    }

    /**
     * 获取当前线程的员工id。
     * @return 员工id
     */
    public static Long getCurrentId() {
        return threadLocal.get();
    }

    /**
     * 移除当前线程的员工id。
     * 详细解释：在方法调用结束后，应该移除当前线程的员工id，以避免内存泄漏。
     */
    public static void removeCurrentId() {
        threadLocal.remove();
    }

}
